Skip to content

DSA: Add FP8/MXFP8 and compressed Top-K indexer paths#370

Draft
jiayus-nvidia wants to merge 4 commits into
NVIDIA:developfrom
jiayus-nvidia:jiayus/import-indexer-fp8-support
Draft

DSA: Add FP8/MXFP8 and compressed Top-K indexer paths#370
jiayus-nvidia wants to merge 4 commits into
NVIDIA:developfrom
jiayus-nvidia:jiayus/import-indexer-fp8-support

Conversation

@jiayus-nvidia

@jiayus-nvidia jiayus-nvidia commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Summary

This PR extends the DSA indexer score path with FP8/MXFP8 support and adds an
SM100 compact forward + Top-K API.

It shares the SM100 indexer score implementation between dense forward and
dense recompute, and supports Top-K indices, logits, fused softmax, and optional
LSE without materializing the full dense score tensor.

Key changes

  • Add precision-aware dense indexer forward paths:
    • SM90 FP8 using E4M3 Q/K with per-token/head FP32 descales and optional LSE.
    • SM100 MXFP8 using E4M3 Q/K with packed E8M0 block scales.
    • Preserve the existing BF16 paths and BSHD/THD dispatch.
  • Reuse unified SM100 indexer score kernels across dense forward and dense
    indexer score recompute.
  • Add an MXFP8 implementation for dense attention score recompute.
  • Add the SM100-only indexer_forward_top_k_wrapper, which returns:
    • INT32 Top-K indices.
    • FP32 selected logits.
    • FP32 fused softmax by default.
    • Optional FP32 LSE.
  • Support compressed Top-K for both BSHD and THD layouts with:
    • BF16 and MXFP8 inputs.
    • Local or global output indices.
    • Caller-owned candidate, index, logits, softmax, and LSE buffers.
    • Optional BF16 BSHD microbatching.
    • BSHD and THD candidate-buffer sizing helpers.
  • Allow the fused forward softmax to be passed directly as the existing sparse
    backward index_score, avoiding indexer-score recompute and a separate
    softmax.
    • BSHD BF16 output can be passed directly.
    • Packed BF16 THD is supported by exposing the packed tensors as zero-copy
      B=1 BSHD views and using global Top-K indices.
    • Backward consumes and overwrites both attn_score and index_score;
      callers that need either tensor afterward must pass a copy.
  • Improve stream-aware execution and external tensor lifetime handling for
    indexer forward and Top-K launches.
  • Remove the superseded SM100 dense-forward decode KV-split and partial-LSE
    merge path.
  • Update DSA documentation, reference helpers, and precision/compressed-path
    test coverage.

Testing

Validated on an NVIDIA B200 with:

CMAKE_BUILD_PARALLEL_LEVEL=8 python setup.py build_ext --inplace

git diff --check upstream/develop...HEAD

git diff --name-only upstream/develop...HEAD -- '*.py' \
  | xargs black --check --line-length 160

PYTHONPATH=python python -m pytest -q test/python/fe_api/dsa

Result:

38 passed, 1 skipped

The skipped test is SM90-specific and was not runnable on the B200 test system.

The BF16 THD-to-backward B=1 packed-view path was also checked on B200 with
two sequence segments. The resulting dQ, dW, and dK had cosine similarity
of approximately 0.99997 against the PyTorch reference.

## Limitations / notes

- The combined compressed forward + Top-K path is SM100-only and currently
  requires MQA (H_kv = 1).

- Indexer kernels require head_dim = 128.
- Compressed MXFP8 currently requires qhead_per_kv_head = 64 and
  sf_vec_size = 32.

- Explicit microbatching is limited to BF16 BSHD and cannot be combined with
  MXFP8, LSE, or explicit q_causal_offsets.

- Top-K slot order is not guaranteed to be sorted. Padded slots are returned as
  index -1, logit -inf, and softmax 0.

- Standalone Indexer Top-K remains limited to top_k <= 2048; the combined
  compressed path uses a separate stage-2 implementation.

- The public sparse backward wrapper has a BSHD-shaped interface. BF16 THD is
  supported through zero-copy B=1 packed views with global Top-K indices.

- FP8 and MXFP8 indexer backward are not currently supported. Although the
  fused softmax is FP32, the backward Q/K/W gradient kernels currently require
  BF16 operands and do not accept FP8 descales or MXFP8 block scales.

- Compressed forward returns global Top-K indices by default. Downstream
  operations must use the same index convention and valid-slot mask.

- BSHD with explicit q_causal_offsets computes candidate offsets eagerly and
  is not CUDA-graph-capturable. THD graph capture requires caller-provided
  candidate offsets and preallocated output buffers.

<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

* **New Features**
* Added an SM100 combined indexer-forward + Top‑K wrapper with optional fused softmax and LSE.
* Extended DSA dense forward/score recomputation wrappers to support FP8/MXFP8 precision via provided scale tensors.
* Added SM100 MXFP8 scale packing/unpacking utilities for the required scale layout contract.
* **Bug Fixes**
* Improved correctness for asynchronous execution by making CUDA stream handling more robust.
* **Documentation**
* Updated DSA docs and README with revised GPU/precision and wrapper/API behavior (including compressed logits + Top‑K flow).
* **Tests**
* Added new validation and regression coverage for MXFP8 and compressed Top‑K/LSE paths.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

@coderabbitai

coderabbitai Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 671196b9-b997-4c92-817b-c2b143729c41

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds FP8/MXFP8 precision support across DSA indexer forward and dense score recompute, introduces a combined SM100 compressed-logits Top-K path, and updates wrappers, kernels, scale utilities, documentation, and tests.

Changes

DSA precision and compressed Top-K forward

Layer / File(s) Summary
MXFP8 scale and instruction utilities
python/cudnn/deepseek_sparse_attention/utils/..., test/python/fe_api/dsa/test_DSA_mxfp8_scale_utils.py
Adds MXFP8 scale packing, blockscaled descriptors, GEMM support, runtime helpers, and layout tests.
Unified SM100 score kernels
score_recompute/*sm100*.py, indexer_forward/indexer_fwd_sm100*.py
Adds unified BF16/MXFP8 indexer-score kernels and MXFP8 dense-attention recompute support, including compressed output routing.
Precision-aware score recompute
score_recompute/_interface_sm100.py, score_recompute/api.py
Adds MXFP8 validation, tile dispatch, compilation paths, and precision-aware public wrappers.
SM90 indexer forward
indexer_forward/indexer_fwd_sm90.py, _interface_sm90.py
Adds FP8 Q/K scaling and optional LSE generation to the SM90 forward path.
Indexer forward APIs
indexer_forward/_interface.py, indexer_forward/api.py, indexer_forward/__init__.py, deepseek_sparse_attention/__init__.py
Adds precision dispatch, backend compilation, LSE handling, dynamic exports, and the combined Top-K wrapper.
Compressed Top-K execution
indexer_forward/_compressed_top_k_sm100.py, indexer_top_k/compress_top_k_sm100.py, indexer_top_k/api.py
Adds BSHD/THD compressed GEMM orchestration, radix Top-K selection, fused softmax, buffer sizing, capture contracts, and stream-aware execution.
Tests and documentation
test/python/fe_api/dsa/*, docs/fe-oss-apis/dsa.md, python/cudnn/deepseek_sparse_attention/README.md
Adds precision and compressed-path validation and documents the revised architecture, support matrix, and API contracts.

Estimated code review effort: 5 (Critical) | ~120 minutes

Sequence Diagram(s)

sequenceDiagram
    participant Caller
    participant TopKWrapper
    participant IndexerInterface
    participant Stage1GEMM
    participant Stage2TopK

    Caller->>TopKWrapper: Call compressed indexer forward
    TopKWrapper->>IndexerInterface: Dispatch compressed logits
    IndexerInterface->>Stage1GEMM: Build compact candidate buffer
    Stage1GEMM-->>IndexerInterface: Return compact candidates
    IndexerInterface->>Stage2TopK: Select Top-K and optional softmax
    Stage2TopK-->>TopKWrapper: Return indices, logits, softmax, and LSE
    TopKWrapper-->>Caller: Return TupleDict
Loading

Suggested labels: mod-cutedsl

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 40.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: adding FP8/MXFP8 support and compressed Top-K indexer paths.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (5)
python/cudnn/deepseek_sparse_attention/utils/sm100/mma_desc.py (2)

151-224: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

No dedicated unit tests for the new blockscaled descriptor-packing logic.

make_blockscaled_instr_desc/blockscaled_mma_op_to_idesc implement intricate bit-packing for the SM100 MXF8F6F4 idesc, but no test file analogous to test_DSA_mxfp8_scale_utils.py exercises this packing directly (only indirectly through downstream kernel correctness tests, if any). A focused unit test asserting expected bit values for representative (M, N, sf_id, major) combinations would catch regressions independent of full kernel execution.

As per path instructions for python/cudnn/**, which say to check "whether there are test cases in test/python/fe_api".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@python/cudnn/deepseek_sparse_attention/utils/sm100/mma_desc.py` around lines
151 - 224, Add focused unit coverage for the new blockscaled descriptor packing
by creating tests under test/python/fe_api for make_blockscaled_instr_desc and
blockscaled_mma_op_to_idesc. Exercise representative M/N, sf_id, and major
combinations, and assert the returned descriptor has the expected bit fields, so
the SM100 MXF8F6F4 packing logic is validated directly instead of only through
downstream kernel tests.

82-89: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Fallback getattr(..., None) could silently misclassify if cutlass_type is unexpectedly None.

If none of the type attributes exist in the installed cutlass module and cutlass_type itself happens to be None, the first is None comparison would incorrectly match and return MXF8F6F4Format.E4M3 instead of raising the intended TypeError. This is unlikely in normal use (real dtype objects are always passed) but the redundant dual-name checks (FloatE4M3FN/Float8E4M3FN) suggest uncertainty about which name is available in the installed cutlass version.

🛡️ Safer alternative
-    if cutlass_type is getattr(cutlass, "FloatE4M3FN", None):
-        return MXF8F6F4Format.E4M3
-    if cutlass_type is getattr(cutlass, "Float8E4M3FN", None):
-        return MXF8F6F4Format.E4M3
-    if cutlass_type is getattr(cutlass, "FloatE5M2", None):
-        return MXF8F6F4Format.E5M2
-    if cutlass_type is getattr(cutlass, "Float8E5M2", None):
-        return MXF8F6F4Format.E5M2
+    e4m3_names = ("FloatE4M3FN", "Float8E4M3FN")
+    e5m2_names = ("FloatE5M2", "Float8E5M2")
+    if any(cutlass_type is getattr(cutlass, name, object()) for name in e4m3_names):
+        return MXF8F6F4Format.E4M3
+    if any(cutlass_type is getattr(cutlass, name, object()) for name in e5m2_names):
+        return MXF8F6F4Format.E5M2
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@python/cudnn/deepseek_sparse_attention/utils/sm100/mma_desc.py` around lines
82 - 89, The dtype-to-format mapping in the helper that checks `cutlass_type`
against `FloatE4M3FN`, `Float8E4M3FN`, `FloatE5M2`, and `Float8E5M2` can
misclassify a `None` input because `getattr(..., None)` makes the first
comparison match accidentally. Update this conversion logic to avoid treating a
missing cutlass symbol or a `None` dtype as a valid match, and keep the intended
`TypeError` path in place for unsupported inputs while still handling the
alternate cutlass type names.
python/cudnn/deepseek_sparse_attention/utils/tensor_conversion.py (1)

15-32: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Docstring doesn't cover the new parameter annotations.

to_cute_tensor now has full type hints but the docstring still only describes the return in one line; assumed_align, leading_dim, fully_dynamic, enable_tvm_ffi, and divisibility aren't documented.

As per path instructions for python/cudnn/**, which say to "Focus on documentation."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@python/cudnn/deepseek_sparse_attention/utils/tensor_conversion.py` around
lines 15 - 32, The to_cute_tensor docstring is missing documentation for its
newly annotated parameters. Update the docstring in to_cute_tensor to describe
assumed_align, leading_dim, fully_dynamic, enable_tvm_ffi, and divisibility,
while keeping the return description accurate; use the existing function
signature in tensor_conversion.py as the reference point.
python/cudnn/deepseek_sparse_attention/indexer_forward/indexer_fwd_sm90.py (1)

52-98: 📐 Maintainability & Code Quality | 🔵 Trivial

Missing test coverage for the generic FP8 epilogue and varlen+FP8 on SM90.

The new test_DSA_indexer_forward_wrapper_fp8_sm90_matches_dequant_reference test only exercises qhead_per_kv_head=64 with divisible shapes, which routes through use_fast_qh64_epilogue/use_unchecked_qh64_full/use_unchecked_qh64_masked (lines 95-97). The generic _epilogue_store_to_gmem FP8 path (qhead_per_kv_head=32, or shapes that don't satisfy the "unchecked" divisibility conditions) and the varlen (THD) + FP8 combination on SM90 appear untested in test/python/fe_api/dsa/.

Given the amount of new FP8-specific branching (split-warpgroup producer/consumer, rKScale shared-memory scale application, LSE accumulation), consider adding at least one test with qhead_per_kv_head=32 and one varlen+FP8 SM90 test.

Based on path instructions: "Focus on whether there are test cases in test/python/fe_api" for python/cudnn/** files.

Also applies to: 369-535

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@python/cudnn/deepseek_sparse_attention/indexer_forward/indexer_fwd_sm90.py`
around lines 52 - 98, Add test coverage in test/python/fe_api for the SM90 FP8
forward path beyond the current qhead_per_kvhead=64 fast epilogue case: add one
case that forces the generic _epilogue_store_to_gmem branch by using
qhead_per_kvhead=32 or a shape that does not satisfy
use_unchecked_qh64_full/use_unchecked_qh64_masked in IndexerFwdSM90, and add one
varlen (THD) + FP8 SM90 test that exercises the is_varlen path with FP8
scales/LSE handling. Keep the existing reference-matching style used by
test_DSA_indexer_forward_wrapper_fp8_sm90_matches_dequant_reference so the new
cases verify the generic FP8 epilogue and varlen+FP8 behavior.

Source: Path instructions

python/cudnn/deepseek_sparse_attention/indexer_forward/api.py (1)

209-215: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Document the newly added public parameters. The indexer_forward_wrapper docstring still only describes {'scores'} and q_causal_offsets, but the signature now exposes precision, q_scale, k_scale, sf_vec_size, return_lse, and lse_out. It's also worth noting that return_lse/lse_out are only honored on SM90 (SM100 raises NotImplementedError) so callers aren't surprised. As per path instructions ("Focus on documentation").

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@python/cudnn/deepseek_sparse_attention/indexer_forward/api.py` around lines
209 - 215, Update the indexer_forward_wrapper docstring to document all newly
exposed public parameters: precision, q_scale, k_scale, sf_vec_size, return_lse,
and lse_out, along with any expected behavior for the outputs. Also note in the
wrapper docs that return_lse and lse_out are only supported on SM90, while SM100
raises NotImplementedError, so callers understand the hardware-specific
limitation.

Source: Path instructions

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@python/cudnn/deepseek_sparse_attention/indexer_forward/api.py`:
- Around line 209-215: Update the indexer_forward_wrapper docstring to document
all newly exposed public parameters: precision, q_scale, k_scale, sf_vec_size,
return_lse, and lse_out, along with any expected behavior for the outputs. Also
note in the wrapper docs that return_lse and lse_out are only supported on SM90,
while SM100 raises NotImplementedError, so callers understand the
hardware-specific limitation.

In `@python/cudnn/deepseek_sparse_attention/indexer_forward/indexer_fwd_sm90.py`:
- Around line 52-98: Add test coverage in test/python/fe_api for the SM90 FP8
forward path beyond the current qhead_per_kvhead=64 fast epilogue case: add one
case that forces the generic _epilogue_store_to_gmem branch by using
qhead_per_kvhead=32 or a shape that does not satisfy
use_unchecked_qh64_full/use_unchecked_qh64_masked in IndexerFwdSM90, and add one
varlen (THD) + FP8 SM90 test that exercises the is_varlen path with FP8
scales/LSE handling. Keep the existing reference-matching style used by
test_DSA_indexer_forward_wrapper_fp8_sm90_matches_dequant_reference so the new
cases verify the generic FP8 epilogue and varlen+FP8 behavior.

In `@python/cudnn/deepseek_sparse_attention/utils/sm100/mma_desc.py`:
- Around line 151-224: Add focused unit coverage for the new blockscaled
descriptor packing by creating tests under test/python/fe_api for
make_blockscaled_instr_desc and blockscaled_mma_op_to_idesc. Exercise
representative M/N, sf_id, and major combinations, and assert the returned
descriptor has the expected bit fields, so the SM100 MXF8F6F4 packing logic is
validated directly instead of only through downstream kernel tests.
- Around line 82-89: The dtype-to-format mapping in the helper that checks
`cutlass_type` against `FloatE4M3FN`, `Float8E4M3FN`, `FloatE5M2`, and
`Float8E5M2` can misclassify a `None` input because `getattr(..., None)` makes
the first comparison match accidentally. Update this conversion logic to avoid
treating a missing cutlass symbol or a `None` dtype as a valid match, and keep
the intended `TypeError` path in place for unsupported inputs while still
handling the alternate cutlass type names.

In `@python/cudnn/deepseek_sparse_attention/utils/tensor_conversion.py`:
- Around line 15-32: The to_cute_tensor docstring is missing documentation for
its newly annotated parameters. Update the docstring in to_cute_tensor to
describe assumed_align, leading_dim, fully_dynamic, enable_tvm_ffi, and
divisibility, while keeping the return description accurate; use the existing
function signature in tensor_conversion.py as the reference point.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 7d40af09-f3c0-42ba-80c9-1f1a4f4868cc

📥 Commits

Reviewing files that changed from the base of the PR and between f005383 and 8c3ea50.

📒 Files selected for processing (31)
  • docs/fe-oss-apis/dsa.md
  • python/cudnn/deepseek_sparse_attention/README.md
  • python/cudnn/deepseek_sparse_attention/__init__.py
  • python/cudnn/deepseek_sparse_attention/indexer_backward/api.py
  • python/cudnn/deepseek_sparse_attention/indexer_forward/__init__.py
  • python/cudnn/deepseek_sparse_attention/indexer_forward/_compressed_top_k_sm100.py
  • python/cudnn/deepseek_sparse_attention/indexer_forward/_interface.py
  • python/cudnn/deepseek_sparse_attention/indexer_forward/_interface_sm90.py
  • python/cudnn/deepseek_sparse_attention/indexer_forward/api.py
  • python/cudnn/deepseek_sparse_attention/indexer_forward/indexer_fwd_sm100.py
  • python/cudnn/deepseek_sparse_attention/indexer_forward/indexer_fwd_sm100_mxfp8.py
  • python/cudnn/deepseek_sparse_attention/indexer_forward/indexer_fwd_sm90.py
  • python/cudnn/deepseek_sparse_attention/indexer_top_k/api.py
  • python/cudnn/deepseek_sparse_attention/indexer_top_k/compress_top_k_sm100.py
  • python/cudnn/deepseek_sparse_attention/score_recompute/_interface_sm100.py
  • python/cudnn/deepseek_sparse_attention/score_recompute/api.py
  • python/cudnn/deepseek_sparse_attention/score_recompute/dense_score_recompute_sm100.py
  • python/cudnn/deepseek_sparse_attention/score_recompute/dense_score_recompute_sm100_mxfp8.py
  • python/cudnn/deepseek_sparse_attention/score_recompute/indexer_score_unified_sm100.py
  • python/cudnn/deepseek_sparse_attention/score_recompute/indexer_score_unified_sm100_mxfp8.py
  • python/cudnn/deepseek_sparse_attention/utils/runtime.py
  • python/cudnn/deepseek_sparse_attention/utils/sm100/gemm.py
  • python/cudnn/deepseek_sparse_attention/utils/sm100/mma_desc.py
  • python/cudnn/deepseek_sparse_attention/utils/sm100/mxfp8_scale_utils.py
  • python/cudnn/deepseek_sparse_attention/utils/tensor_conversion.py
  • test/python/fe_api/dsa/dsa_reference.py
  • test/python/fe_api/dsa/dsa_utils.py
  • test/python/fe_api/dsa/test_DSA_dense_score_recompute.py
  • test/python/fe_api/dsa/test_DSA_indexer_forward.py
  • test/python/fe_api/dsa/test_DSA_indexer_forward_compressed.py
  • test/python/fe_api/dsa/test_DSA_mxfp8_scale_utils.py

@Anerudhan

Copy link
Copy Markdown
Collaborator

@cudnn-ci-bot run

@cudnn-ci-bot

Copy link
Copy Markdown

🚀 Running mirror pipeline

Branch: cudnn-gh/pr-370-8c3ea50
Pipeline: 57505265

@jiayus-nvidia
jiayus-nvidia force-pushed the jiayus/import-indexer-fp8-support branch from 6bda0b9 to d7579a8 Compare July 13, 2026 06:34
@jiayus-nvidia
jiayus-nvidia marked this pull request as draft July 14, 2026 07:54
@jiayus-nvidia

Copy link
Copy Markdown
Contributor Author

WIP for adding deterministic and e2e test

Share the SM100 unified score kernels between indexer forward and dense recompute, add the SM90 FP8 path, and port the MXFP8 scale helpers and coverage. Keep compressed-logits/top-k support out of scope.
Port the SM100 compact-logits path and fold in the latest indexer optimizations: fused Top-K softmax, THD MXFP8, BF16/MXFP8 LSE for BSHD and THD, caller-owned output buffers, MQA validation, and the backward softmax fast path. Remove the superseded decode KV-split and partial-LSE merge path.
Port /code/indexer commit b731ca5 to the cudnn-frontend DSA layout.
@jiayus-nvidia
jiayus-nvidia force-pushed the jiayus/import-indexer-fp8-support branch from 0821bf2 to 061e6cd Compare July 24, 2026 02:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants